Der GME 1 ________________________________________________________











Der Golem−Megamax−Editor


GME







Version 1.0 ohne GEM−Fenster

(C) 1989 by Johannes Leckebusch

Lizenziert fב¶r Megamax ModulaΓêÆ2

Der GME 2 ________________________________________________________


Inhalt

1 Einfב¶hrung

1.2 Die wichtigsten Eigenschaften

2.1 Installieren des GME als Shell−Editor

3.1 Eine einfache Programmiersitzung
3.2 Starten des Editors mit einem Text

4. ב£bersicht ב¶ber alle Befehle des GME
4.1 Menב¶ "GME"
4.2 DateiΓêÆMenב¶
4.3 BlockΓêÆMenב¶
4.4 MarkenΓêÆMenב¶
4.5 SuchenΓêÆMenב¶
4.6 EditierenΓêÆMenב¶
4.7 ProgrammΓêÆMenב¶
4.8 Reine Tastaturbefehle

5.1 Tastatur konfigurieren
5.2 Editor mit/ohne GME.GME konfigurieren

6. Nachwort





Der GME 3 ________________________________________________________


1.1 Einfב¶hrung

Der GME ist ein professioneller Programmeditor. Er wurde aus dem G2E
(Golden Two Editor) abgeleitet, der seinerseits ein Nachkomme des legendבñren
TLGE (The Little Golem Editor) ist.

Der GME wurde speziell an das Megamax−Modula−Programmiersystem
angepaבƒt. Die 1001 Features des G2E wurden einerseits auf das wesentliche
reduziert, andererseits so ergבñnzt, daבƒ der Editor optimal mit der Shell des
MM2ΓêÆSystems zusammenarbeitet. Die Benutzerfב¶hrung ist ein Kompromiבƒ
zwischen allgemeinen GEMΓêÆ Konventionen (natב¶rlich Mausbedienung!) und den
Eigenheiten eines besonderen Editorkonzeptes.


1.2 Die wichtigsten Eigenschaften:

Wertet Fehlermeldungen des MM2−Compilers aus (direkte Anzeige der
Fehlerposition in der Source, Anzeige der Fehlermeldung im Klartext)

Kann Compiler, Make und LoadtimeΓêÆLinker starten (offline, das heiבƒt,
die Dateien werden gespeichert und der Editor verlassen)

Startet Compiler (online) aus dem Speicher (ohne den Editor zu
verlassen, Compiler liest Text aus dem Speicher)

Fullscreeneditor auch mit seitwבñrts scrollen, dh. auch Zeilen mit mehr
als 80 Zeichen kבÀnnen bearbeitet werden

Alle ב¶blichen Grundfunktionen wie Suchen/Tauschen, Block markieren,
Cut/CopyΓêÆPaste oder Block sichern, Block einrב¶cken

Bedienung ב¶ber Maus und Tastatur parallel, volle Ausnutzung der
CursorΓêÆ und Funktionstasten, zusבñtzlich konfigurierbare Belegung von
Control− und Alternate−Kombinationen

Lבñdt beliebig viele Texte in den Speicher (soweit Speicher reicht),
schnelles Umschalten zwischen Vorder− und Hintergrundtext,
ב£bernehmen von Textteilen aus einem Text in einen anderen, direktes
Compilieren des jeweils angezeigten Textes aus dem Speicher

Abspeichern der Konfiguration (Autoindent, Overwrite/Insert, Wort−
oder Mustersuche usw.), wahlweise Abspeichern der aktuellen
Textpositionen und Merkpositionen in Zusatzdatei zu jedem Text

Der GME 4 ________________________________________________________


2.1 Installieren des GME als Shell−Editor

Um mit dem Editor arbeiten zu kבÀnnen, sollte dieser in der Shell installiert
werden. Dies geschieht einfach durch Anmelden des Editors als Arbeitseditor
(Eintragen des Namens "GME" in den ShellΓêÆParametern fב¶r den Editor).
Weitere Parameter: Shell braucht weder fב¶r den Editor nach den Sourcen zu
suchen noch die Fehlermeldung nach einem Compiler−Fehler anzuzeigen.
Temporבñre Dateien sind nicht nבÀtig, in der Argumentzeile kבÀnnen alle Infor-
mationen ב¶bergeben werden. Vorteilhaft ist es, den Editor resident zu laden
(sofern genב¶gend Speicher vorhanden ist) ΓêÆ das geschieht durch die Anweisung
"Load GME" in der BatchΓêÆDatei (ב¶blicherweise "MM2SHELL.M2B").

Zum Editor gehבÀrt das ResourceΓêÆFile "GMEMENUE.RSC", das sich im gleichen
Ordner wie die Shell oder auf einem der in DefaultPath (s. Shell−Batch)
eingetragenen Pfade befinden sollte.

Der GME 5
________________________________________________________


3.1 Eine einfache Programmiersitzung

Um ein Programm einzugeben, zu compilieren (in Maschinenkode ב¶bersetzen)
und von Textfehlern zu befreien, brauchen Sie den Editor nicht zu verlassen.
Auch nicht, um verschiedene Module, die eventuell zu einem Programm
gehבÀren, zu bearbeiten. Doch fangen wir mit dem einfachsten Fall an.

Wenn Sie ein neues Programm eingeben wollen, also keine vorhandene Datei
bearbeitet werden soll, ist eine neue, leere Arbeitsdatei anzulegen (mit Taste
N) oder ein Leername bei einer bestehenden Arbeitsdatei oder der aktuellen
Datei einzugeben. Starten Sie den Editor durch E (fב¶r die Arbeitsdatei) bzw.
Control−E (wenn Sie die 'aktuelle Datei' bearbeiten wollen).

Bild 1









Der Editor ist, wenn er resident geladen wurde, nach etwa 1,5 Sekunden
arbeitsbereit. Er zeigt die GEMΓêÆMenב¶leiste (in Bild 1 und den folgenden), einen
grauen Balken und darunter, schwarz unterlegt, die Statuszeile. In dieser Zeile
wird normalerweise die Anzahl Zeilen der Datei nach "ZL" angezeigt, danach
die Zeile, in der sich der Cursor befindet, die Spalte und der Arbeitsmodus
(Einfב¶gen oder ב£berschreiben, Indent oder keine Anzeige fב¶r die halbauto-
matische Einrב¶ckung). In bestimmten Situationen erscheinen auch andere
Meldungen in dieser Zeile, wie zum Beispiel "Compiler lבñuft..." oder eine
Fehlermeldung (siehe unten). In Bild 1 sehen Sie ein Rufzeichen, das andeutet,
daבƒ der Text bearbeitet wurde und in dieser Fassung noch nicht gesichert ist.
Besitzt der Text bereits einen Dateinamen, unter dem er gesichert oder
geladen wurde, so wird auch dieser zusammen mit dem gesamten Pfad
angezeigt.

Bild 2






Geben Sie nun den in Bild 1 zu erkennenden Programmtext ein. Dann wבñhlen
Sie im ProgrammΓêÆMenב¶ den Eintrag "Compilieren" (Bild 2). Sie kבÀnnen statt
dessen auch AlternateΓêÆD drב¶cken, also die AlternateΓêÆTaste festhalten und
dann D. Dies wird durch die Raute und das D im Menב¶eintrag angezeigt. Ein

Der GME 6 ________________________________________________________


"^" in der Tastenbezeichnung bedeutet die Control−Taste, ein kleines "s" die
ShiftΓêÆTaste. Einige der Tastenbefehle kבÀnnen je nach Konfiguration verschieden
sein, beachten Sie die Anzeige in der GEMΓêÆMenב¶leiste.

Bild 3



Es erscheint sofort die Anzeige "Compiler lבñuft" in der Statuszeile (Bild 3).
Diese Anzeige bleibt so lange erhalten, wie der Compiler zur ב£bersetzung
braucht oder bis er einen Fehler findet. In unserem Fall (Bild 4) erscheint sehr
rasch eine Fehlermeldung und der Cursor springt auf den ersten Buchstaben
des inkriminierten "Bezeichners".

Bild 4






Der Compiler kennt das Wort "WriteString" nicht. Das liegt daran, daבƒ Modula
eine bibliotheksorientierte Sprache ist ΓêÆ alle EinΓêÆ/Ausgabeprozeduren mב¶ssen
aus einer geeigneten Library "importiert" werden.

Bild 5










Beachte: Bei der Bearbeitung von umfangreichen Texten kann es
vorkommen, daבƒ Sie die letzte Fehlermeldung noch einmal anschauen
wollen. Sobald Sie die Fehlerzeile mit dem Cursor verlassen,
verschwindet die Fehlermeldung jedoch aus der Anzeige der Statuszeile.
Rufen Sie einfach den Befehl "Zur Fehlermeldung" (Bild 5) auf. Der
Cursor springt wieder an die Fehlerstelle, und diese wird erneut
angezeigt. Dies ist so lange mבÀglich, wie kein neuer Compilerlauf
stattgefunden hat (der entweder einen anderen Fehler meldet oder das
Programm fehlerfrei ב¶bersetzt).

Der GME 7
________________________________________________________


Bld 6







Tragen Sie nun die in Bild 6 gezeigte "FROM...IMPORT"−Anweisung nach. Wenn
Sie keinen weiteren Fehler gemacht haben, so erscheint nach einem neuen
Compilerlauf die Anzeige des Pfades, auf den die ב¶bersetzte Codedatei
geschrieben wurde, sowie deren Lבñnge in Bytes.

Bild 7













Wenn Sie den Editor verlassen wollen, geben Sie (Bild 7) den "Beenden"−Befehl
ein (es gibt noch andere, eventuell elegantere MבÀglichkeiten, den Editor zu
verlassen, die in der Gesamtב¶bersicht des DateiΓêÆMenב¶s weiter unten
beschrieben werden). Statt dessen kבÀnnen Sie auch AlternateΓêÆX drב¶cken.

Bild 8







Der GME wacht sorgfבñltig darב¶ber, daבƒ keine Arbeit verlorengeht. Obwohl Sie
ihm keinen Auftrag gegeben haben, den soeben eingegebenen Text (der sich
bisher nur im Speicher befindet!) zu sichern, ermahnt er Sie (Bild 8), ihn
zu speichern. Sie haben hier drei MבÀglichkeiten. Zunבñchst einmal erkennen Sie
an der Anzeige Text "" editiert! , daבƒ der Text noch keinen Dateinamen besitzt
ΓêÆ dieser wב¶rde nבñmlich sonst zwischen den Anfב¶hrungszeichen erscheinen.


Der GME 8 ________________________________________________________


Klicken sie auf JA (oder drב¶cken Sie die ReturnΓêÆTaste, da dies der Default-
button ist − erkennbar an der dickeren Umrandung), so wird der Editor den
Text ungefragt speichern − sofern er den Dateinamen schon kennt. In diesem
Fall wב¶rde allerdings die Filebox erscheinen und die Eingabe eines Dateinamens
verlangen (Bild 9). MבÀchten Sie den Text nicht unter dem angezeigten Namen
speichern, oder wollen Sie ב¶berhaupt in den Editor zurב¶ck, so klicken Sie auf
ABBRUCH. Falls Sie aber auf NEIN klicken, wird der Text gelבÀscht und der
Editor verlassen.

Genaugenommen wird die im Speicher befindliche Textversion
verworfen. Sollte der Text bereits frב¶her gesichert worden sein, so
wird diese Datei natב¶rlich nicht gelבÀscht!


Bild 9














Der GME 9 ________________________________________________________


3.2 Starten des Editors mit einem Text

Der Editor kann auf verschiedene Weise bereits mit einem Text gestartet
werden, den er automatisch lבñdt und anzeigt. Beispielsweise kבÀnnen Sie aus
einem der Fenster in der Shell einfach mit der Maus einen Textnamen auf das
Editor−Icon "ziehen". Ziehen Sie einen Textnamen statt dessen auf den
Compiler, so wird der Text ב¶bersetzt. Wenn dabei ein Fehler erkannt wird,
startet die Shell anschlieבƒend automatisch den Editor mit diesem Text,
natב¶rlich wird dabei auch sogleich die Fehlerstelle angezeigt. Die weitere Arbeit
geschieht wie oben beschrieben, dh. Sie kבÀnnen z. B. den Fehler korrigieren
und zur Kontrolle aus dem Speicher compilieren. Da der Text bearbeitet
wurde, achtet der Editor automatisch darauf, daבƒ Sie die verבñnderte Fassung
abspeichern ΓêÆ oder willkב¶rlich verwerfen.

Beachte: Beim Compilieren aus dem Speicher dב¶rfen keine IncludeΓêÆ
Anweisungen im Programmtext stehen, in diesem Fall kommt eine
Fehlermeldung. Sie mב¶ssen solche Quellen offline compilieren, also mit
dem Befehl "Ende & Comp." im ProgrammΓêÆMenב¶. Dabei werden alle
bearbeiteten Texte vorher abgespeichert und der Editor verlassen,
danach startet automatisch der Compiler.

Der GME 10
________________________________________________________


4. ב£bersicht ב¶ber alle Befehle in der GEMΓêÆMenב¶leiste

Im folgenden finden Sie eine ב£bersicht der Editorbefehle in der Ordnung, wie
sie in der GEMΓêÆMenב¶leiste erscheinen. Der Editor besitzt ב¶ber 100 Befehle, die
meisten davon werden in der Menב¶leiste aufgefב¶hrt. Fast alle Befehle kבÀnnen
auבƒerdem ב¶ber Funktionstasten oder/und Steuerzeichenfolgen ausgelבÀst
werden. Wir sprechen im folgenden immer beispielsweise von dem Befehl
"Sichern" (s. unten), wobei es gleichgב¶ltig ist, ob dieser durch Anklicken der
betreffenden Menב¶leiste, durch Eingabe der dort angezeigten Tastenkombination
oder durch eine Funktionstaste ausgelבÀst wird.

Beachte: Die Befehle werden wie folgt notiert (Beispiele aus dem Menב¶
"Editieren" u. "Programm"):

Insert: Taste "Insert"
sInsert: Taste "Insert" mit festgehaltener Shift−Taste
^J: Taste "J" mit festgehaltener Control−Taste
[Raute]D: Taste "D" mit festgehaltener Alternate−Taste

Die Steuerzeichenfolgen orientieren sich an Wordstar beziehungsweise an den
Turbo−Editoren von Borland, jedoch ist der GME weitaus komfortabler. Alle
wichtigen Befehle sind jedoch ב¶ber Funktionstasten (Cursortasten) erreichbar,
auch kבÀnnen die SteuertastenΓêÆ und FunktionstastenΓêÆZuordnungen geבñndert
werden (siehe Abschnitt "Anpassen der Tastaturbelegung").

Beachte: Falls in den Menב¶s Ihres Editors andere Tastenabkב¶rzungen
fב¶r die Befehle angezeigt werden, haben Sie einen abweichend
konfigurierten Editor erhalten. Falls Sie selbst die Tastaturbelegung der
Befehle בñndern, mב¶ssen Sie die entsprechende Anzeige mit dem
KResource−Programm "NRSC_ASH.PRG" selbst im Resource−File
nachtragen (falls Sie dies wב¶nschen).

Der GME 11 ________________________________________________________


4.1 Menב¶ "GME"













Der erste Eintrag ruft eine Box mit der Copyright−Anzeige des Editors und der
Versionsnummer. Eventuelle weitere Eintrבñge sind fב¶r Accessories vorgesehen.

Sollten Sie Probleme mit oder Fragen zu Ihrem GME haben, so ist es
nב¶tzlich, stets die Versionsnummer anzugeben. Sollte diese durch
Manipulieren der ResourceΓêÆDatei verבñndert sein, so gilt im Zweifelsfalle
die beim Laden oder Speichern in der Statuszeile angezeigte Version!
Diese ist fest im Programmcode enthalten.

Der GME 12
________________________________________________________


4.2 Das DateiΓêÆMenב¶











Das DateiΓêÆMenב¶ enthבñlt alle Befehle zum Laden und Speichern von Texten.
Wenn der Editor infolge eines ב£bersetzungsfehlers gestartet wird oder
dadurch, daבƒ man das Icon einer Textdatei auf das EditorΓêÆIcon schiebt, lבñdt er
automatisch den betreffenden Text. Unabhבñngig davon kבÀnnen jederzeit weitere
Texte geladen werden. Alle Texte befinden sich gleichzeitig im Speicher (dieser
muבƒ ausreichend groבƒ sein). Von einem Text zum anderen gelangen Sie ב¶ber
das "Editieren"ΓêÆMenב¶ (siehe unten).

Die ersten beiden Eintrבñge, von denen einer mit einem Hבñkchen gekennzeichnet
ist, stellen "Schalter" dar. Schalter sind stets die ersten Eintrבñge in einem
Menב¶ (in Datei, Block, Suchen und Editieren).

Beachte: Die HבñkchenΓêÆEinstellungen kבÀnnen mit dem ΓêÆΓêÆא† "Parameter
sichern"ΓêÆBefehl in die Datei GME.GME gespeichert werden, so daבƒ sie
beim nבñchsten Start des Editors automatisch wiederkehren ΓêÆ siehe
unten!

Neu

Es wird ein neuer Text im Speicher angelegt. Damit kבÀnnen Sie jederzeit, auch
wenn der Editor bereits mehrere Programmdateien geladen hat, den Entwurf
eines neuen Programm−Moduls beginnen. Es erscheint ein leerer Bildschirm
(die anderen Texte sind nach wie vor vorhanden, siehe Menב¶ "Editieren"). Dazu
wird ein neuer "Textpuffer" angelegt. Siehe auch ΓêÆΓêÆא† Schlieבƒen. Beim
Verlassen des Editors oder bei Eingabe eines Sicherungs−Befehls wird die
Eingabe eines Dateinamens verlangt.

בûffnen...

Es wird eine neue Datei geladen, dh. es erscheint die Filebox. Wבñhlen Sie die
gewב¶nschte Datei aus oder klicken Sie auf Abbruch (in diesem Fall verbleibt
ein leerer Textpuffer, der eventuell beim nבñchsten בûffnenΓêÆBefehl verwendet
wird). Auf jeden Fall bleiben vorher im Editor geladene Texte erhalten − siehe
Menב¶ "Editieren". Beachten Sie, daבƒ nur so viele und so lange Texte geladen

Der GME 13 ________________________________________________________


werden kבÀnnen, wie der noch freie verfב¶gbare Arbeitsspeicher Ihres
Computers erlaubt. Kann eine Datei nicht mehr vollstבñndig geladen werden, so
erscheint eine Fehlermeldung ("Speicher reicht nicht"). In so einem Fall sollten
Sie unbedingt andere Texte lבÀschen (ΓêÆΓêÆא† Schlieבƒen), ehe Sie weiterarbeiten und
die betreffende Datei neu laden.

Beachte: Der GME benutzt eine sehr flexible interne Speicher-
verwaltung. Dadurch kann er beliebig viele Texte "durcheinander"
verwalten, die sich den Arbeitsspeicher je nach Bedarf teilen − dh. ein
Text kann sehr groבƒ, ein anderer sehr klein sein, der gesamte freie
Speicher steht potentiell allen Texten zur Verfב¶gung. Mit anderen
Worten: Es gibt keine feste Aufteilung des freien Speichers in n
gleichgroבƒe Abschnitte oder dergleichen. Allerdings hat dies zur
Konsequenz, daבƒ die Texte im Speicher mehr Platz brauchen, als dies
ihrer Lבñnge auf Diskette entspricht (besonders dann, wenn die Texte
sehr viele kurze Zeilen enthalten).

Einfב¶gen...

Eine Disk− oder Festplattendatei wird in den gerade bearbeiteten Text ab der
aktuellen Cursorposition eingefב¶gt. Sie erscheint dort als markierter Block (und
kann mit den ΓêÆΓêÆא† BlockΓêÆBefehlen im Clipboard gemerkt werden).

Sichern

Der gerade bearbeitete Text wird unter dem schon vorhandenen Dateinamen
gespeichert (es wird eine .BAKΓêÆDatei angelegt, auבƒer wenn diese Betriebsart
abgeschaltet ist ΓêÆΓêÆא† "Backup anlegen" oben). Wurde noch kein Dateiname
vergeben, so fragt der Editor durch Anzeige der Filebox danach.

Sichern als...

Es wird in jedem Fall die Filebox angezeigt, so daבƒ man einen abweichenden
Dateinamen angeben kann. Bei Return wird der vorgewבñhlte Dateiname benutzt.
Fehlt dieser oder klickt man auf ABBRUCH, so wird die Datei nicht gesichert.

Block sichern...

Es wird ein markierter Block als Datei herausgeschrieben, der Dateiname wird
abgefragt. Wenn kein Block markiert ist, erscheint eine Alarmbox.

Schlieבƒen

Ein Textpuffer soll aus dem Speicher entfernt werden. Wenn der Text seit der
letzten Sicherung verבñndert wurde, wird automatisch die Sequenz "Sichern
als..." vorgeschaltet, danach wird der Textpuffer gelבÀscht und entfernt (der

Der GME 14
________________________________________________________


letzte Puffer kann nicht entfernt werden, dh. es muבƒ immer mindestens einen
Textpuffer geben solange der Editor lבñuft). Wenn der Puffer editiert wurde
und nicht gespeichert wird, kann er nicht entfernt werden.

Konfiguration speichern

Je nachdem, ob dieser Eintrag mit einem Hבñkchen gekennzeichnet ist oder
nicht, wird zu einem Text der Form "DATEI.M" eine Zusatzdatei "DATEI.GME"
gespeichert, die individuelle Einstellungen, Cursor− und Merkpositionen etc.
enthבñlt. Durch Anklicken dieses Eintrags wird das Hבñkchen einΓêÆ oder aus-
geschaltet.

Beachte: Wenn Sie, damit der Editor schneller startet, keine GME.GME−
Datei verwenden wollen, kבÀnnen Sie die Voreinstellungen beim Start
des Editors auch im Modul GMEConfig ("GMECONFI.I") בñndern, wie im
Abschnitt 5.2 beschrieben.

Backup anlegen

Je nachdem, ob dieser Eintrag mit einem Hבñkchen gekennzeichnet ist oder
nicht, wird beim Sichern eines Textes DATEI.XXX eine alte Datei gleichen
Namens in DATEI.BAK umbenannt (die alte .BAK−Datei geht verloren).

Einstellungen sichern

Es werden die aktuellen Einstellungen (Hבñkchen!) in der Datei GME.GME
gesichert (und zwar die Werte, die fב¶r den gerade angezeigten Text eingestellt
sind). Beim nבñchsten Start des Editors ist dies die StandardΓêÆVoreinstellung
aller Parameter. Fב¶r Tastaturbelegungen siehe Abschnitt "Tastatur konfi-
gurieren" unten.

Beenden

Verlassen des Editors, ohne Dateien zu speichern. Falls jedoch Texte
bearbeitet wurden, verlangt der Editor zur Sicherheit das Speichern oder
ausdrב¶ckliche Verwerfen der Texte, siehe Bild 8 oben.

Der GME 15 ________________________________________________________


4.3 Das BlockΓêÆMenב¶










Das BlockΓêÆMenב¶ enthבñlt Befehle, mit denen Textabschnitte gemerkt, kopiert,
verschoben, gelבÀscht oder in andere Texte ב¶bertragen werden kבÀnnen. Dabei
wird das Copy/Cut & Paste−Konzept nach dem Vorbild des Macintosh
angewandt (mit kleinen Abweichungen). Das bedeutet grundsבñtzlich folgende
Befehlsfolge:


(1) Textabschnitt mit der Maus, Tastenbefehlen oder Menב¶befehlen
markieren. Der "Block" erscheint auf dem Bildschirm hervorgehoben.


(2) Nun wird der Block gemerkt, indem man ihn ins "Klemmbrett" (eine Art
Notizblatt oder Pinwand) ablegt − dabei kann er aus dem aktuellen Text
an der alten Position "ausgeschnitten" werden, oder es wird lediglich
eine Kopie angefertigt (Merken).


(3) Schlieבƒlich kann der Block an anderer Stelle wieder eingefב¶gt werden ΓêÆ
auch in einen anderen Text (siehe ΓêÆΓêÆא† "Nבñchster Text" im Menב¶
"Editieren")

Wenn Sie sich Bild 12 ansehen, fallen zwei Dinge auf:

* Der Schalter "GEMΓêÆKlemmbrett" hat kein Hבñkchen
* Der Eintrag "Einfב¶gen" ist gesperrt (Schattenschrift)

Wenn wir den Schalter zunבñchst ignorieren, bedeutet dies, daבƒ sich derzeit
nichts auf dem Schwarzen Brett (Klemmbrett oder Clipboard) befindet. Es
kann daher nichts in den Text eingefב¶gt werden. Erst nach einem der Befehle
"Ausschneiden" oder "Merken" wird der Befehl "Einfב¶gen" verfב¶gbar. Zuvor
muבƒ aber ein Block markiert werden (ΓêÆΓêÆא† Anfang markieren, ΓêÆΓêÆא† Ende
markieren etc., s. unten).

Normalerweise ist das "Klemmbrett" ein verdeckter Textpuffer, wird also im
Speicher verwaltet (siehe ΓêÆΓêÆא† "Block Editieren" unten). Einer GEMΓêÆKonvention
zufolge kann man dieses Klemmbrett auch ב¶ber sogenannte ScrapΓêÆDateien
(wבÀrtlich: Kritzelblock oder Schmiertafel) mit anderen Programmen (meist
Accessories) austauschen. Der GME ist fב¶r diese Konvention vorbereitet.

Der GME 16
________________________________________________________


Wenn Sie den Schalter "GEMΓêÆKlemmbrett" auf EIN stellen (mit Hבñkchen
versehen), werden gemerkte oder ausgeschnittene BlבÀcke in eine Datei
geschrieben, die sich in einem Ordner "CLIPBRD" befindet. Der GME verwendet
hier den Dateinamen SCRAP.TXT, der vollstבñndige Pfad lautet also
"C:ב¶CLIPBRDב¶SCRAP.TXT" (ersatzweise auch "A:ב¶CLIPBRDב¶SCRAP.TXT"). Bei
einem "Einfב¶gen" versucht der GME also in jedem Fall, diese Datei bei der
aktuellen Cursorposition in den gerade angezeigten Text einzufב¶gen. Ist kein
solcher Text vorhanden bzw. der Pfad nicht zu finden, erscheint eine Alarmbox
mit der Meldung "Das Klemmbrett ist leer".

GEM−Klemmbrett

Ein− und Ausschalten des GEM−Clipboard−Mechanismus (Datei zum Daten-
tausch mit anderen Programmen, siehe voriger Abschnitt).

Ausschneiden

Ein markierter Block wird aus dem Text entfernt ("ausgeschnitten") und
gemerkt.

Merken

Ein markierter Block wird lediglich in das Klemmbrett kopiert und zur weiteren
Verwendung aufbewahrt.

Einfב¶gen

Ein vorher gemerkter Text (ΓêÆΓêÆא† "Ausschneiden", "Merken") wird an der
aktuellen Cursorposition in den angezeigten Text eingefב¶gt.

Editieren

Mit diesem Befehl gelangen Sie in den normalerweise unzugבñnglichen
KlemmbrettΓêÆPuffer und kבÀnnen diesen wie einen gewבÀhnlichen Text editieren.
Ein spבñterer Befehl ΓêÆΓêÆא† "Einfב¶gen" wird den so verבñnderten Inhalt des
schwarzen Brettes ab der aktuellen Cursorposition in den Text einfב¶gen, der
gerade angezeigt wird. In die normale Textbearbeitung kommen Sie mit dem
ΓêÆΓêÆא† "Beenden"ΓêÆBefehl (Menב¶ Datei) oder der Esc(ape)ΓêÆTaste zurב¶ck.

Anfang markieren

Festlegen eines Blockanfangs. Bringen Sie zuvor den Cursor auf die
gewב¶nschte Anfangsposition. Geht auch mit Mausklick (linke Taste).

Der GME 17 ________________________________________________________


Ende markieren

Festlegen eines Blockendes. Bringen Sie zuvor den Cursor auf die gewב¶nschte
Endposition. Der Textabschnitt wird anschlieבƒend hervorgehoben dargestellt.
Danach sollten Sie einen der Befehle ΓêÆΓêÆא† "Ausschneiden" oder ΓêÆΓêÆא† "Merken"
wבñhlen. Geht auch mit Mausklick (Shift und linke Taste oder mit der rechten
Maustaste).

Zeile markieren

Es wird die Zeile, in der sich der Cursor befindet, als Block markiert.

Alles markieren

Es wird der gesamte Text, der gerade angezeigt ist, als Block markiert.

Bemerkung: Es gibt einen weiteren Befehl, der nicht in der Menב¶leiste
aufscheint: Blockmarken aufheben (Standardeinstellung ^KH).

Der GME 18 ________________________________________________________


4.4 Das MarkenΓêÆMenב¶








Marken erleichtern die Orientierung in einem Text. Der GME erlaubt es, in
jedem im Speicher befindlichen Text unabhבñngig von den anderen drei
"Benutzermarken" zu setzen. Er merkt sich deren Position, solange die Texte
bearbeitet werden (beim Abspeichern mit ΓêÆΓêÆא† "Konfiguration speichern" EIN
auch in einer Zusatzdatei). Zusבñtzlich merkt er sich zu jedem Text die aktuelle
Cursorposition, die zuletzt editierte Textstelle und die letzte Compilerfehler-
meldung. Das kann besonders nב¶tzlich sein, wenn man in mehreren Modulen
Compilerfehler erhבñlt, die vielleicht eine gemeinsame Ursache haben. Oder
wenn Sie bei der Erstellung eines Programms mehrfach bestimmte Stellen in
verschiedenen Quelltexten von Bibliotheksmodulen nachschauen wollen.

Setze Marke 1 bis 3

Die augenblickliche Cursorposition im angezeigten Text wird gemerkt.

Zu Marke 1 bis 3

Der Cursor springt auf die gemerkte Stelle im jeweiligen Text. Wurde keine
Stelle gemerkt, springt er an den Textanfang.

Zu Zeile...

Der Editor verlangt die Eingabe einer Zeilennummer und springt dann zu
dieser. Ist die Zeilennummer zu groבƒ, springt er an das Textende. Dieser
Befehl ist oft nב¶tzlich, wenn man eine Textstelle "ungefבñhr im zweiten Drittel
der Source" sucht, oder wenn ein Mitprogrammierer sagt: "בändere mal den
Befehl in Zeile 345 folgendermaבƒen...".

Letzte Position

Der Cursor springt auf die zuletzt editierte Position im angezeigten Text.

Zur Fehlermeldung

Der Cursor springt auf die zuletzt vom Compiler gemeldete Fehlerstelle und
zeigt die Fehlermeldung an. Gibt es keine solche, springt er an den Textanfang
und es erscheint lediglich die Meldung "Compilerinfo" oder die Daten der
ב¶bersetzten Codedatei.


Der GME 19 ________________________________________________________


4.5 Das Suchmenב¶









Ein Editor ohne komfortable Suchbefehle ist heute undenkbar. Der GME ist mit
einem modernen Suchalgorithmus ausgestattet, der einen Begriff um so
schneller findet, je lבñnger er ist (vielleicht im Gegensatz zu dem, was man
intuitiv erwarten mבÀchte ΓêÆ bei sehr langen Quellen kבÀnnen Sie sich diese
Eigenschaft gegebenenfalls zunutze machen). Selbstverstבñndlich kann man
vorwבñrts und rב¶ckwבñrts suchen, und man kann bestimmen, ob ein Begriff mit
oder ohne Berב¶cksichtigung der GroבƒΓêÆ/Kleinschreibung (in Modula sehr
wichtig!), ob als Teilwort oder nur als ganzes Wort gefunden werden soll.
Natב¶rlich lבñבƒt sich ein Suchbegriff auch gegen einen anderen tauschen, und
schlieבƒlich gibt es die MבÀglichkeit, das gerade rechts vom Cursor befindliche
Wort auch an anderer Stelle ausfindig zu machen.

Beachte: Der GME kann nur Suchbegriffe finden, die vollstבñndig in einer
Zeile stehen. Er kann auch nicht Zeilenenden in den Suchbegriff
aufnehmen. Diese Beschrבñnkungen werden eventuell in kב¶nftigen
Versionen aufgehoben. Aufgrund der Eigenart des optimierten
Suchverfahrens funktioniert die Suche "rב¶ckwבñrts" nur zwischen
verschiedenen Zeilen − derselbe Suchbegriff innerhalb einer Zeile wird
also nicht "rב¶ckwבñrts" gefunden. Gehen Sie ggf. in die vorige Zeile.

Wort suchen

Dieser Schalter bestimmt, ob nur ein vollstבñndiges Wort (Donaudampf-
schiffahrtskapitבñn wird nicht gefunden, wenn man Donau oder Dampf sucht)
oder auch ein Teilwort (Muster) gefunden wird.

Grossklein

Dieser Schalter bestimmt, ob der Suchvorgang GroבƒΓêÆ und Kleinschreibung
unterscheidet. Wenn Sie also nicht genau wissen, wie der Suchbegriff
geschrieben wird, stellen Sie am besten beide Schalter auf AUS (kein
Hבñkchen). Ist es aber lבñstig, daבƒ "Donau" bei allen Wortkombinationen fב¶ndig
wird, stellen Sie zumindest "Wort suchen" auf EIN.

Der GME 20 ________________________________________________________


Suchen...

Es wird ein Suchbegriff abgefragt. Wurde frב¶her bereits ein Suchbegriff
eingegeben, wird dieser angeboten (und mit Return oder Pfeil−Nach−Oben oder
ΓêÆUnten ב¶bernommen). Er kann mit allen in einer Zeile wirksamen Tasten
(Backspace, Cursor, Delete) editiert werden. Mit Esc(ape) lבÀschen Sie den
alten Suchbegriff und kבÀnnen einen neuen eingeben.

Schlieבƒen Sie den Suchbegriff mit Return oder PfeilΓêÆNachΓêÆUnten ab, so wird
vorwבñrts gesucht. Um rב¶ckwבñrts zu suchen, schlieבƒen Sie die Eingabe mit
Pfeil−Nach−Oben ab.

Tauschen...

Auf die Abfrage des Suchbegriffs erfolgt in gleicher Weise die Abfrage des
Wortes, gegen welches dieser getauscht werden soll. VORSICHT, wenn "Wort
suchen" und "Grossklein" ausgeschaltet sind!

Nach der Eingabe eines Such− oder Tauschbegriffes erfolgt eine Abfrage
verschiedener Optionen (einmal Suchen, letztes Vorkommen oder eine
bestimmte Anzahl von Malen suchen).

Pick−Wort

Entspricht ΓêÆΓêÆא† "Suchen..." (s. o.), jedoch wird das Wort ab der Cursorposition
als Vorgabe prבñsentiert. Die Suche beginnt automatisch am Textanfang, man
findet also zunבñchst das erste Vorkommen des Wortes im Text.

Pick−Tauschen

Wie Pick−Wort, jedoch wird auch ein Tauschbegriff abgefragt.

Nochmal suchen

Der letzte Suchbegriff wird erneut gesucht (nבñchstes Vorkommen).

Der GME 21
________________________________________________________


4.6 Das EditierenΓêÆMenב¶










In diesem Menב¶ werden einige allgemeine Bearbeitungsweisen eingestellt. Dazu
kommen ein paar Befehle, die fב¶r den GME eigentב¶mlich sind. Dieser Editor
kann beliebig viele Texte im Speicher verwalten, zwischen denen man beliebig
hinΓêÆ und herspringen und TextblבÀcke tauschen kann. Er ist dabei nicht an eine
bestimmte Anzahl von Fenstern oder Puffern gebunden − die Anzahl
beziehungsweise der Gesamtumfang der Texte wird lediglich durch den
verfב¶gbaren (freien) Arbeitsspeicher Ihres Computers beschrבñnkt. Diese
Eigenschaft unterscheidet ihn von fast allen anderen Editoren, die entweder
nur so viele Texte editieren kבÀnnen, wie GEMΓêÆFenster verfב¶gbar sind, oder die
sonst eine willkב¶rliche Beschrבñnkung aufweisen. Natב¶rlich ist es richtig, daבƒ
man im Normalfall nicht 10, 20 oder 50 Texte gleichzeitig im Speicher braucht
ΓêÆ aber jede willkב¶rliche Grenze kann sich als lבñstig erweisen.

ב£berschreiben

Dieser Schalter bestimmt, ob der Editor im Einfב¶geΓêÆ oder ב£berschreibmodus
arbeitet. Umschaltung auch mit der Insert−Taste.

Autoindent

Schaltet den halbautomatischen Einrב¶ckmodus um, dh. der Editor geht nach
einem Return unter den Anfang der vorigen Zeile (EIN) oder zurב¶ck zum linken
Bildschirmrand. Fב¶r die Eingabe "strukturierter" Programmtexte bevorzugt man
den Autoindent−Modus.

Nבñchster Text

Die Anzeige wechselt auf den nבñchsten im Speicher befindlichen Text (falls
mehr als einer vorhanden ist). Wenn sich leere Puffer im Speicher befinden
(z.B. durch mehrere ΓêÆΓêÆא† "Neu"ΓêÆ Befehle, siehe DateiΓêÆMenב¶), kבÀnnen auch
Leeranzeigen erfolgen. Die Texte sind immer zu einem "Ring" verkettet, das
heiבƒt, nach dem letzten Text fב¶hrt dieser Befehl wieder auf den ersten. Gibt
es nur einen Text, so ist dieser selbst immer sein "nבñchster Text".

Der GME 22 ________________________________________________________


Hintergrund

Hat man mehrere Texte im Speicher, so ist das "Durchhangeln" zu einem
bestimmten Text recht lבñstig (siehe auch ΓêÆΓêÆא† Menב¶ "Texte", das jedoch in der
Version 1.0 noch nicht existiert). Dann kann es vorteilhaft sein, sich jeweils
einen bestimmten Text auf einer Taste zu merken, so daבƒ man zwischen
Vorder− und Hintergrundtext mit einem Tastendruck hin und herspringen kann.
Zum Umschalten dient eine im Menב¶ angezeigte FunktionsΓêÆTaste (oder das
Anklicken dieses Befehls).

Mit jeder Ausfב¶hrung des Befehls tauschen die Texte ihre Plבñtze. Es kבÀnnen
sich jedoch mehrere Texte (TextA, TextB, TextC, TextD usw.) im Speicher
befinden. Auf irgendeine Weise muבƒ man daher festlegen, zwischen welchen
beiden Texten diese Schnellumschaltung erfolgen soll. Dabei gilt folgende
einfache Regel: Der Text, der im Moment, in dem man den "Hintergrund"−
Befehl eingibt, zu sehen ist, wird in den Hintergrund ב¶bernommen. Der zuletzt
als "Hintergrund" ב¶bernommene Text gelangt zur Anzeige. Ist das nicht der
gewב¶nschte Text, sucht man diesen einfach durch mehrfache Eingabe des
"Nבñchster Text"ΓêÆ Befehls. Erneute Eingabe des HintergrundΓêÆBefehls fב¶hrt dann
auf den vorigen Text zurב¶ck.

Block einrב¶cken

Dies ist ein etwas ungewבÀhnlicher Befehl. Er geht davon aus, daבƒ man zuvor
einen Block markiert hat (siehe ΓêÆΓêÆא† BlockΓêÆMenב¶ oben). Der (noch hervor-
gehobene) Block kann nun in einer tabellarischen Weise bearbeitet werden, dh.
jedes eingegebene oder gelבÀschte Zeichen wirkt sich auf eine ganze Spalte
aus, die so lang ist wie der markierte Block. Jederzeit kבÀnnen Sie mit dem
Cursor nach rechts oder links fahren. GelבÀschte Spalten gehen verloren.
Beendet wird diese Arbeitsweise mit dem ΓêÆΓêÆא† "Beenden"ΓêÆBefehl (Esc(ape)). Am
besten probieren Sie es einmal aus!

Der GME 23
________________________________________________________


4.7 Das ProgrammΓêÆMenב¶









Hier finden Sie die Befehle zusammengefaבƒt, mit denen der Editor Aktivitבñten
des MM2−Programmiersystems steuern kann, also einen Programmtext
ב¶bersetzen oder ein Make starten bzw. das fertige Programm anschlieבƒend
laufen lassen.

Compilieren

Der Compiler startet. Er ב¶bersetzt den vom Editor gerade angezeigten Text
aus dem Arbeitsspeicher (der Text muבƒ also nicht vorher gesichert sein, es
wird die im Speicher befindliche Version ב¶bersetzt). Wenn Sie mehrere Texte
im Editor geladen haben, kבÀnnen Sie diese nacheinander ב¶bersetzen, indem Sie
vorher mit dem ΓêÆΓêÆא† "Nבñchster Text"ΓêÆ oder ΓêÆΓêÆא† "Hintergrund"ΓêÆBefehl (siehe
Menב¶ Editieren) den gewב¶nschten Text angesprungen haben.

Datum

Zeigt das vom Betriebssystem vergebene Datum der gerade bearbeiteten Datei
an. In diesem Zusammenhang ist interessant, daבƒ der Editor nach dem
Compilieren einer Datei (aus dem Speicher) beim nachfolgenden (!) Speichern
der dazu gehבÀrigen Textdatei deren Uhrzeit auf den Zeitpunkt der ב£bersetzung
zurב¶cksetzt. Anderenfalls wב¶rde ein daraufhin aktiviertes Make (das sich am
Datums− und Uhrzeiteintrag von Text− und Codedateien orientiert) die Datei
nochmals ב¶bersetzen, was nicht notwendig wבñre.

Ende & Comp.

Heiבƒt eigentlich: "Ende und Compilieren". Das heiבƒt, der Editor wird (nach
automatischem Speichern aller Quellen) verlassen und der Compiler "Offline"
gestartet. Dies kann zum Beispiel erforderlich sein, wenn der verfב¶gbare
Arbeitsspeicher nicht ausreicht, um Editor und Compiler gleichzeitig "resident"
zu halten. Oder auch dann, wenn man im Zusammenhang mit der ב£bersetzung
den Editor verlassen will.

Der GME 24 ________________________________________________________


Ende & Ausf.

Wie ΓêÆΓêÆא† "Ende & Comp.", jedoch mit anschlieבƒenden Start des fertigen
Programms (falls keine Fehler aufgetreten sind).

Make

Sichert alle Dateien automatisch, verlבñבƒt den Editor und startet das Make mit
der Default−Make−Datei (siehe Bedienung: Shell, Umgebungsinformationen).

Make & Ausf.

Wie ΓêÆΓêÆא† "Make"; bei erfolgreicher ב£bersetzung wird das fertige Programm
anschlieבƒend gestartet.

Der GME 25
________________________________________________________


4.8.1 Reine Tastaturbefehle

Einige wenige Befehle sind nur ב¶ber die Tastatur verfב¶gbar ΓêÆ hauptsבñchlich
wegen ihrer untergeordneten Wichtigkeit. So zum Beispiel das LבÀschen von
Blockmarken ohne sonstige Wirkung. Im Abschnitt 5.1 erfahren Sie, wie Sie
die Tastenbelegungen nach Ihrem eigenen Geschmack בñndern kבÀnnen.

LבÀsche Blockmarken

Hebt zuvor gesetzte Blockmarken auf, die Hervorhebung verschwindet wieder.
Standardmבñבƒig auf ^KH.

LבÀsche Wort

LבÀscht vorwבñrts vom Cursor bis zur nבñchsten Wortgrenze. Eine Wortgrenze
definiert sich weitestgehend nach den syntaktischen Regeln einer hבÀheren
Programmiersprache, d.h. Leerzeichen, Kommata, Semikolons, Punkte etc.
bilden Wortgrenzen. Standardmבñבƒig auf ^T und auf sDelete.

Merke Zeile

Merkt sich die Zeile, in welcher der Cursor gerade steht, in einem besonderen
Speicher. Die Zeile kann durch ΓêÆΓêÆא† "Zeile kopieren" oder ΓêÆΓêÆא† "Zeile rב¶ckholen"
an eine andere Stelle oder in einen anderen Text kopiert werden. Home−Taste.

LבÀsche Zeile

LבÀscht und merkt sich die Zeile, in welcher der Cursor gerade steht, in einem
besonderen Speicher. Die Zeile kann durch ΓêÆΓêÆא† "Zeile kopieren" oder ΓêÆΓêÆא†
"Zeile rב¶ckholen" an eine andere Stelle oder in einen anderen Text kopiert
werden. ^Y und sClr.

Zeile wie vorher

Dieser Befehl wirkt nur, solange man eine Zeile, in der Verבñnderungen
vorgenommen wurden, nicht verlassen oder einen Befehl eingegeben hat. Unter
diesen Voraussetzungen wird der alte Zustand der Zeile wieder hergestellt.
Undo−Taste.

Zeile kopieren

Fב¶gt bei der aktuellen Cursorposition eine vorher mit ΓêÆΓêÆא† "Merke Zeile" oder
"LבÀsche Zeile" gemerkte Zeile ein. sUndo.

Der GME 26 ________________________________________________________


Zeile rב¶ckholen

Holt eine Zeile aus dem "Zeilenstack" und fב¶gt sie bei der aktuellen Cursor-
position ein. Der Zeilenstack wird durch den wiederholt ausgefב¶hrten Befehl
ΓêÆΓêÆא† "LבÀsche Zeile" oder ΓêÆΓêÆא† Wirkung. einfach Undo, wenn Undo zum
zweitenmal gedrב¶ckt wird oder vorher die aktuelle Zeile nicht verבñndert
worden war. D.h. Undo bewirkt immer zuerst ein "Zeile wiederherstellen" und
dann ein "Zeile rב¶ckholen". Wenn der Zeilenstack leer ist, hat die Taste keine
Wirkung.


4.8.2 Cursor−Befehle

Die verschiedenen Cursorbefehle erscheinen nicht in einem eigenen Menב¶, da
sie sehr leicht merkbar ב¶ber die dafב¶r vorgesehen Pfeiltasten in Kombination
mit Shift und Control sowie teilweise auch mit der Maus ausfב¶hrbar sind.

Alle Cursorbewegungen folgen dem Prinzip der "Dramatisierung". Damit ist
folgendes gemeint: Die Taste Pfeil−nach−links bewegt den Cursor um ein
Zeichen nach links. Zusammen mit der Shift− Taste wird der Befehl
"dramatischer" − der Cursor springt um ein Wort nach links. Mit Control
schlieבƒlich springt er an den Anfang der Zeile.

Pfeil nach oben bewirkt ensprechend den Sprung um eine Zeile, einen
Bildschirm nach oben oder an den Anfang der Datei.

Zeichen nach links, nach rechts

Links− oder Rechtspfeil, auch ^S oder ^D.

Wort links, Wort rechts

Cursor springt um ein Wort nach links, Cursor springt um ein Wort nach
rechts. Beide Befehle kבÀnnen mit Shift und der LinksΓêÆ bzw. Rechtspfeiltaste
ausgelבÀst werden, oder mit den WordstarΓêÆ Kombinationen ^A, ^F.

Zeilenanfang und Zeilenende

Cursor springt zum Anfang oder Ende der Zeile. Befindet er sich schon dort,
geht er zum Ende der vorigen bzw. Anfang der nבñchsten Zeile. AuslבÀsung auch
mit Control−Links oder Rechtspfeil und mit ^QS, ^QD.

Seite nach oben und nach unten

Mit ShiftΓêÆPfeilΓêÆnachΓêÆoben oder nachΓêÆunten auslבÀsbar sowie ^R und ^C.

Der GME 27
________________________________________________________


Zum Textanfang/Textende

Mit ControlΓêÆPfeilΓêÆnachΓêÆoben oder nachΓêÆunten auslבÀsbar sowie ^QR, ^QC.

Hochrollen bzw. Runterrollen

Will man erreichen, daבƒ beim Scrollen der Cursor in seiner alten Textzeile
bleibt (und entsprechend mit nach oben oder unten rב¶ckt) klickt man in die
Statuszeile oder ganz nahe an den unteren Bildschirmrand. Eine entsprechende
Wirkung hat es, wenn man ganz nah an den rechten oder linken Bildschirmrand
klickt (oder wenn der Cursor diese ב¶berschreitet). WSΓêÆKombinationen (WS:
Word−Star) sind ^W und ^Z.

Der GME 28 ________________________________________________________


5.1 Tastatur konfigurieren

Die Tastatur des GME kann, was die Befehle betrifft, beliebig konfiguriert
werden. Dazu muבƒ der Quelltext des Moduls GMEConfig ("GMECONFI.I")
verבñndert und neu compiliert werden.

Am Ende des Moduls finden Sie den Prozeduraufruf:

InitTastatur (Tastatur);

Diese Prozedur richtet die sogenannten Tastaturebenen ein. Eine Tastaturebene
ist zum Beispiel die ganze Tastatur, eine zweite die ganze Tastatur mit Shift,
eine dritte die ganze Tastatur mit Control usw. Auch die Kombinationen der
Statustasten, wie Shift+Control, Shift+Alternate, bilden eigene Ebenen. Durch
Ausnutzung aller Kombinationen wבñre es mבÀglich, alle Tasten 16fach zu
belegen, das wird jedoch nicht ausgenutzt.

PROCEDURE InitTastatur (VAR T: eineTastatur);
VAR index: CARDINAL;
BEGIN
FOR index := 0 TO cTastaturEbenen DO
NewTastenebene (T [index]);
InitTastenebene (CAST (einStatus, index), T [index]);
InitFunktionstasten (CAST (einStatus, index), T [index]);
END (* FOR *);
InitControl (T [CAST (CARDINAL, einStatus {Control})]);
InitAlternate (T [CAST (CARDINAL, einStatus {Alternate})]);
END InitTastatur;

Die Prozedur ruft ihrerseits "NewTastenebene" (fב¶r alle mבÀglichen Ebenen)
auf. Fב¶r unsere Zwecke interessant sind InitTastenebene und
InitFunktionstasten sowie die separaten Aufrufe von InitControl und
InitAlternate (auבƒerhalb der FORΓêÆ Schleife).

Um die Arbeitsweise der Tastaturabfrage im GME zu verstehen, mב¶ssen wir
uns kurz den Datentyp "einTasteneintrag" ansehen, der u. a. von der
exportierten Universalprozedur "LiesTaste" zurב¶ckgegeben wird.

Der GME 29
________________________________________________________


einTasteneintrag = RECORD
CASE TT: einTastenTyp OF
keineTaste: |
Zeichen: zch: CHAR |
Befehl: bef: einBefehl |
String: str: einLinePointer |
Makro: mak: einMakroPointer |
Mausklick: x, y: CARDINAL |
Tastenebene: teb: einTastaturPointer |
END (* CASE *);
END (* einTasteneintrag *);


Dieser VariantenΓêÆRecord teilt zunבñchst jedem Tasteneintrag einen Typ zu ΓêÆ
beispielsweise "Zeichen". Wichtig fב¶r uns sind die Typen "Befehl" und
"Tastenebene". Das Legen von Strings auf Tasten (damit kבÀnnte man z. B. auf
Shift−Alternate−M das Wort MODULE etc. legen) ist im GME zur Zeit noch
nicht implementiert, auch keine Makros − es handelt sich also nur um Voraus-
deklarationen fב¶r kב¶nftige Erweiterungen.

Eine Tastenebene ist eine Liste (Array) von lauter Tasteneintrבñgen. Da ein
Eintrag wieder ein Pointer auf eine Tastenebene sein kann, lassen sich die
Wordstar− oder Turbo−(MS−DOS)−Editor−Befehlsfolgen wie ^KB, ^KK
(Blockmarken setzen) usw. damit realisieren.

Die ASCIIΓêÆZeichen ("A", "B", "a", "b" usw.) werden beim GME nicht ב¶ber die
eigene TastaturΓêÆTabelle des Editors geholt, sondern vom TOS ב¶bernommen.
Das hat den Vorteil, daבƒ die nationalen Zeichensבñtze mit ihren oft vertauschten
Sonderzeichen und zum Teil auch Buchstaben automatisch richtig angepaבƒt
werden.

Der tiefere Grund, warum ב¶berhaupt eine eigene Tastaturtabelle benutzt wird,
liegt u. a. darin, daבƒ sich sonst die Cursortasten nicht symmetrisch mit Shift
und Control auswerten lassen, da TOS hier leider ganz unsystematisch
vorgeht.

Die Tasten mit einer durch ihre Aufschrift oder ein Symbol (Pfeil) gekenn-
zeichneten Funktion, einschlieבƒlich F1 bis F10, werden von "InitFunktionstasten"
belegt.

Alle Tasten werden im GME mit einem Aufzבñhlungstyp (einKey) bezeichnet.
Zusammen mit der Ebene, die als Index (0..15) oder als Menge ({Shift,
Control}, {Alternate} usw.) bezeichnet werden kann, wird ein Tastenanschlag
vollkommen eindeutig bezeichnet. Es muבƒ nun nur jedem solchen Tasteneintrag
ein bestimmter Rב¶ckgabewert zugeordnet werden.

Der GME 30 ________________________________________________________


Man kann beim GME einen Befehl oft auf drei oder vier verschiedene Weisen
(durch eine Funktionstaste, eine Controltastenfolge, einen Mausklick oder durch
Anklicken eines Eintrags in der Menב¶leiste) eingeben. Der Editor selbst merkt
den Unterschied nicht ΓêÆ die Befehle werden "normiert" an ihn zurב¶ckgegeben;
dazu dient der Aufzבñhlungstyp "einBefehl"(siehe auch die Prozedur
InitMenuTabelle, die die Verknב¶pfung zwischen GEMΓêÆMenב¶eintrבñgen und
GME−Befehlen herstellt).


5.1.1 Funktionstasten

Die lokalen Prozeduren "SetzF" (alle Funktionstasten F1 bis F10) und SetzC
(alle Tasten von Esc bis Cursor−Rechtspfeil − genaue Zuordnung siehe
Definition im Programmtext) setzen in einer an "InitFunktionstasten"
ב¶bergebenen Tastaturebene die betreffenden Tasten.

IF (keyStatus = einStatus {})
OR (keyStatus = einStatus {Caps}) THEN
SetzF (SuchString, StriTausch, PickWort, WeitSuch, nothing,
Paste, zurAMark, zurEMark, zur1Mark, zur2Mark);
SetzC (Quit, tabulator, DelLChar, DelRChar, return,
help, RestoreCurrentLine,
insert, cursup, PopCopyLine,
cursleft, cursdown, cursright);
ELSIF (keyStatus = einStatus {Shift})
OR (keyStatus = einStatus {Shift, Caps}) THEN
SetzF (SuchWort, WortTausch, PickTausch, zuNrZeile, QueryError,
CopyToClipboard, setAMark, setEMark, set1Mark, set2Mark);
SetzC (QuitCompile, backtab, DelLWort, DelRWort, return,
EditBlock, CopyLastBufferLine,
indent, Seitup, PopDeleteLine,
Wortleft, Seitdown, Wortrigt);

Diese (InitFunktionsTasten entnommene) Anweisungsfolge bestimmt zum
Beispiel, daבƒ auf der Taste F1 ohne Shift, aber mit oder ohne CapsLock, der
Befehl "SuchString" sitzt, auf F2 StriTausch usw. Mit Shift sind es dagegen
die Befehle "SuchWort" und "WortTausch". Leicht zu erkennen ist auch die
Belegung der Cursortasten ohne und mit Shift. Um die Belegung zu בñndern,
braucht man nur die bei den Aufrufen eingesetzten Befehlsnamen zu בñndern
(Beachten Sie, daבƒ eine Belegung der Cursortasten mit AlternateΓêÆKombina-
tionen wirkungslos ist, da der Tastaturprozessor diese bereits in simulierte
Mausbewegungen umwandelt).

Der GME 31
________________________________________________________


5.1.2 Alternate− und Controltasten

Sehr einfach zu verstehen ist die Belegung der Alternate−Tastenkombinationen:

PROCEDURE InitAlternate (T: einTastaturPointer);
BEGIN
SetControl (T, Ta, QuitCompileRun); (* Speichern und RETURN 4 *)
SetControl (T, Tc, QuitCompile); (* = Compilieren aus d. Editor! *)
SetControl (T, Td, Compile); (* Im Speicher compilieren *)
SetControl (T, Tm, Make); (* RETURN 3 *)
SetControl (T, Tr, MakeExec); (* Quit Return 4 *)
SetControl (T, Tt, ZeitUndDatum);
SetControl (T, Tx, ExitEditor);
END InitAlternate;


Dies wird zusammen mit dem Aufruf verstבñndlich:

InitAlternate (T [CAST (CARDINAL, einStatus {Alternate})]);

Der Prozedur wird die Tastenebene "Alternate" ב¶bergeben. Es sind nur einige
AlternateΓêÆKombinationen belegt, Sie kבÀnnten in die Prozedur noch weitere
eintragen, etwa auch, um die Tasten F1 bis F10 mit Alternate zu belegen, falls
Sie das wב¶nschen.

Die Controltasten−Belegungen sind etwas komplizierter.

Sehen Sie sich die relativ lange Prozedur InitControl im Quellcode an. Sie
enthבñlt fב¶r jede Taste einen Aufruf, die meisten sind SetControlΓêÆAufrufe (wie
in InitAlternate), die direkt einen Befehl auf die Taste legen − zum Beispiel
Cursleft auf ^S:

SetControl (T, Ts, cursleft);

Bei der Taste K (wie auch bei Q und O) finden wir einen anderen Prozedur-
aufruf, der eine ganze Tastenebene, also eine Folge von zwei nacheinander zu
betבñtigenden Tasten, einrichtet. Stellvertretend ist hier nur der Anfang von
"CtrlKEbene" wiedergegeben:

PROCEDURE CtrlKEbene (t: einTastaturPointer; k: einKey);
BEGIN
NewTastenebene (t^ [k].teb); t^ [k].TT := Tastenebene;
InitTastenebene (einStatus {}, t^ [k].teb);
WITH t^ [k] DO
SetControl (teb, T1, set1Mark);
SetControl (teb, T2, set2Mark);
SetControl (teb, T3, set3Mark);

Der GME 32 ________________________________________________________


Die ersten drei Anweisungen initialisieren eine neue Tastenebene − das ist
wichtig, falls Sie selbst Prozeduren schreiben wollen, um beispielsweise
abweichend auf ^M eine eigene Ebene einzurichten. Der zweite Parameter der
Prozedur ist die Taste, auf der die Ebene eingerichtet werden soll. Unter der
WITHΓêÆAnweisung folgen dann die Befehlseintrבñge fב¶r die jeweils als zweite zu
betבñtigende Taste. Also ^K1 um die Marke 1 zu setzen.


5.1.3 Resourcefile ΓêÆ Menב¶leiste

Wenn Sie das ResourceΓêÆFile verבñndern, mב¶ssen Sie die vom ResourceΓêÆ
Construction−Programm ausgegebenen Konstanten in den Anfang des Moduls
kopieren (unter dem entsprechenden Kommentar) und eventuell auch die
Prozedur InitMenuTabelle בñndern. Beachten Sie, daבƒ eventuell die darב¶ber
stehende Konstante "cMaxMenu" fב¶r die Anzahl der Menב¶ΓêÆBefehle geבñndert
werden muבƒ. So kבÀnnen Sie sich auch die GEMΓêÆMenב¶leiste und damit die
Bedienung des Editors ב¶ber diese nach Belieben selbst festlegen

Der GME 33 ________________________________________________________


5.2 Editor mit/ohne GME.GME konfigurieren

Der GME wבñhlt beim erstmaligen Start eine bestimmte Voreinstellung,
beispielsweise, ob er im ב£berschreibΓêÆ oder Einfב¶gemodus arbeitet, ob wortΓêÆ
oder musterweise gesucht wird etc. Diese Einstellungen nimmt die Prozedur
"InitConfig" vor, die sich ebenfalls im Modul GMEConfig befindet. In dieser
Prozedur finden Sie zwei Beispiele fב¶r die Initialisierung von Betriebsweisen
(eines auskommentiert):

(* Beispiel 1: Automatisch einrב¶cken ein, BAKΓêÆDatei erzeigen ein *)

Modus := Moden {ControlZeichen, AutoIndent, TabFiltern, MakeBAK};

(* Beispiel 2: Auבƒerdem Konfiguration laden u. zu Texten speichern: *)

Modus := Moden {ControlZeichen, AutoIndent, TabFiltern, MakeBAK,
KonfigSpeichern};

Sie kבÀnnen beliebige der FlagΓêÆKonstanten aus dem Aufzבñhlungstyp "Mode"
verwenden. Die restlichen Zuweisungen in der Prozedur sollten tunlichst nicht
verבñndert werden.

Die Arbeitsweise ist so: Zunבñchst wird ein zentraler Puffer angelegt, der die
Standardkonfiguration enthבñlt (ConfigInit ist FALSE). Wenn (anschlieבƒend)
ConfigInit TRUE ist, werden spבñter angelegte Textpuffer durch Kopieren der
Werte aus dem ConfigPuffer initialisiert.

Wenn im ConfigPuffer, also im oberen Teil der Prozedur, das Flag
"KonfigSpeichern" eingefב¶gt wurde, so lבñdt der Editor jedoch beim Starten die
Datei GME.GME, die individuelle Voreinstellungen enthבñlt, die sich auch nach
Verבñndern abspeichern lassen (ΓêÆΓêÆא† 4.2 Konfiguration sichern). Auבƒerdem wird
dann zu jeder Textdatei eine GME−Datei mit diesem Record gespeichert, der
zusבñtzlich auch die aktuelle Postion des Cursors und der Suchmarken enthבñlt.
Diese Einstellung kann wבñhrend der Sitzung mit dem Editor auch individuell
verבñndert werden.


Der GME 34 ________________________________________________________


Johannes Leckebusch

Besonderer Dank an Hartwig Constien und Peter Hellinger, meine beiden
"Weggefבñhrten" wבñhrend der Entwicklung des G2E, von dem der GME "nur"
eine Untermenge (mit eigenen Erweiterungen) ist. Unvergesslich wird uns die
Grillparty bleiben, auf der wir uns, nachdem wir uns seit Monaten bzw. Jahren
ב¶ber die "MAUS"ΓêÆMailbox kannten, zum erstenmal von Angesicht zu Angesicht
sahen.

Ohne diese und manche andere Freunde wבñre der Editor nie geworden, was er
heute ist. Erwבñhnen muבƒ ich auch Wolfgang Huber, der mich Jahre zuvor ΓêÆ
vergeblich ΓêÆ warnte: "Nun fang bloבƒ nicht an, einen eigenen Editor zu program-
mieren" ΓêÆ genau das hat mich nבñmlich die folgenden Jahre ב¶berwiegend
beschבñftigt und von anderen, vielleicht wichtigeren (?) Tבñtigkeiten abgehalten.
Schlieבƒlich danke ich den Lesern gewisser Zeitschriften, die mir all die Jahre
die Treue gehalten haben und die sich nach so langer Zeit immer noch
sporadisch nach einer alten oder neuen Fassung des "TLGE" erkundigen. Ihnen
sei an dieser Stelle versichert: Der TLGE lebt ΓêÆ wenn er jetzt auch G2E heiבƒt.
Nבñheres wird sehr bald zu hבÀren oder zu lesen sein!

Schlieבƒlich danke ich Thomas Tempelmann alias "TT" fב¶r seinen Auftrag, der
zur ersten "kommerziellen" Version der GolemΓêÆEditorΓêÆFamilie gefב¶hrt hat. Und
Arnd Beiבƒner und Julian Reschke fב¶r ihre nimmermב¶de Kritik an einem so
penetranten GEM−Ignoranten, wie ich einer bin, und wem noch alles? Wen ich
vergessen habe, der fב¶hle sich ebenfalls bedankt!